

class Food {
    public void show(){
        System.out.println("食物");
    }
}
class Fruit extends Food {
    public void show(){
        System.out.println("水果");
    }

}
class Apple extends Fruit {
    public void show(){
        System.out.println("苹果");
    }
}
class Banana extends Fruit {
    public void show(){
        System.out.println("香蕉");
    }
}
class Message<T> { // 设置泛型
    private T message ;
    public T getMessage() {
        return message;
    }
    public void setMessage(T message) {
        this.message = message;
    }
}
 class TestDemo {
    public static void main(String[] args) {
        Message<Apple> message = new Message<>() ;
        message.setMessage(new Apple());
        fun(message);
        Message<Banana> message2 = new Message<>() ;
        message2.setMessage(new Banana());
        fun(message2);
    }
    // 此时使用通配符"?"描述的是它可以接收任意类型，但是由于不确定类型，所以无法修改
    public static void fun(Message<? extends Fruit> temp){
//temp.setMessage(new Banana()); //仍然无法修改！
//temp.setMessage(new Apple()); //仍然无法修改！
        temp.getMessage().show();
        System.out.println(temp.getMessage());

    }
}
